#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H

#include <QWidget>
#include "volumetool.h"
#include "musiclist.h"
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include "commonpage.h"
#include "lrcpage.h"
#include <QPropertyAnimation>
#include <QSqlDatabase>

QT_BEGIN_NAMESPACE
namespace Ui { class MusicPlayer; }
QT_END_NAMESPACE

class MusicPlayer : public QWidget
{
    Q_OBJECT

public:
    MusicPlayer(QWidget *parent = nullptr);
    ~MusicPlayer();


private slots:
    void on_quit_clicked();

    void on_volum_clicked();

    void on_addLocal_clicked();

    void onBtFormClick(int pageId);

    void updateLikeMusicAndPage(bool isLike, const QString& musicId);

    //获取正在播放音乐在播放列表中的索引
    void onCurrentIndexChanged(int index);

    //媒体播放槽函数
    //暂停和播放
    void onPlayMusicClicked();

    //上一曲
    void onPlayUpClicked();

    //下一曲
    void onPlayDownClicked();

    //播放模式切换
    void onPlayBackModeClicked();

    //播放所有
    void onPlayAll(PageType pageType);

    //设置静音槽函数
    void onSetMusicMuted(bool isMuted);

    //设置播放音量
    void onSetPlayerVolume(int volume);

    //歌曲切换,播放总时长改变处理
    void onDurationChanged(qint64 duration);

    //歌曲进度发生改变处理
    void onPositionChanged(qint64 position);

    //进度条改变后,同步播放进度
    void onMusicSliderChanged(float ratio);

    //可用播放源改变后,更新播放控制区信息
    void onMetaDataAvailableChanged(bool available);

    void on_lrcWord_clicked();

    void on_min_clicked();

public:

    void initUi();

    void initPlayer();

    void initSqlite();

    void initMusicList();

    void connectSignalAndSlots();

    void playAllMusicOfCommonPage(CommonPage *page, int index);

    void playMusicByIndex(CommonPage *page, int index);

    QJsonArray randomPiction();

    void onMusicPlayerQuit();

protected:
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);

private:
    Ui::MusicPlayer *ui;

    QPoint dragPosition;      //为实现窗口自由移动,获取鼠标对于窗口topLeft位置

    VolumeTool *volumeTool;

    MusicList musicList;

    QSqlDatabase sqlite;

    QMediaPlayer *player;     //播放控制

    QMediaPlaylist *playlist; //播放列表

    QPropertyAnimation *lrcPageAnimation;  //歌词页面动画对象

    LrcPage *lrcPage;         //歌词页面

    CommonPage *currentPage;   //记录当前播放页面

    int index;                 //播放歌曲在页面中索引

    qint64 totalTime;          //当前播放歌曲总时间
};
#endif // MUSICPLAYER_H
